// axios: 二次封装AJAX请求
import axios from 'axios'
import config from '../config'
import { Message } from 'element-ui'

const baseUrl = process.env.NODE_ENV === 'development' ?
  config.baseUrl.dev : config.baseUrl.prop

class HttpRequest {
  constructor(baseUrl) {
    this.baseUrl = baseUrl
  }

  // 获取基本的配置
  getConfig() {
    const config = {
      baseURL: this.baseUrl,
      header: {}
    }
    return config
  }

  // 拦截器
  interceptors(instance) {
    // 添加请求拦截器
    instance.interceptors.request.use(config => {
      // 在发送请求前做些什么
      // console.log('拦截处理请求');
      // console.log('config', config); // 请求配置
      return config
    }, error => {
      // 对请求错误做些什么
      Message.error("服务期未响应")
      return Promise.reject(error.message)
    })

    // 添加响应拦截器
    instance.interceptors.response.use(response => {
      // console.log('处理响应结果');
      const res = {
        status: response.status,
        data: response.data
      }
      return res
    }, error => {
      Message.error("服务期未响应")
      return Promise.reject(error.message)
    })
  }

  sendRequest(options) {
    const instance = axios.create()
    // console.log('instance', instance);

    options = { ...(this.getConfig()), ...options }
    // console.log('options', options);
    
    this.interceptors(instance)
    
    return instance(options) // 返回promise对象
  }
}

export default new HttpRequest(baseUrl)
